package Brikker;

class Dronning extends Brikker {
  //Løpertrekk
  private int En_Rad_Venstre = 7;
  private int To_Rad_Venstre = 14;
  private int Tre_Rad_Venstre = 21;
  private int Fire_Rad_Venstre = 28;
  private int Fem_Rad_Venstre = 35;
  private int Seks_Rad_Venstre = 42;
  private int Syv_Rad_Venstre = 49;
  //løpertrekk
  private int En_Rad_Hoeyre = 9;
  private int To_Rad_Hoeyre = 18;
  private int Tre_Rad_Hoeyre = 27;
  private int Fire_Rad_Hoeyre = 36;
  private int Fem_Rad_Hoeyre = 45;
  private int Seks_Rad_Hoeyre = 54;
  private int Syv_Rad_Hoeyre = 53;
  //Tårntrekk
  private int Syv_Rader = 56;
  private int Seks_Rader = 48;
  private int Fem_Rader = 40;
  private int Fire_Rader = 32;
  private int Tre_Rader = 24;
  private int To_Rader = 16;
  private int En_Rad = 8;
  //tabell over tårntrekk
  private int[] trekk = {Syv_Rader, Seks_Rader, Fem_Rader, Fire_Rader, Tre_Rader, To_Rader, En_Rad};
  //tabell over løpertrekk
  public int[] trekk_Venstre = {En_Rad_Venstre, To_Rad_Venstre, Tre_Rad_Venstre, Fire_Rad_Venstre, Fem_Rad_Venstre, Seks_Rad_Venstre, Syv_Rad_Venstre};
  public int[] trekk_Hoeyre = {En_Rad_Hoeyre, To_Rad_Hoeyre, Tre_Rad_Hoeyre, Fire_Rad_Hoeyre, Fem_Rad_Hoeyre, Seks_Rad_Hoeyre, Syv_Rad_Hoeyre};
  
  public Dronning(String lag){
  super("Dronning", lag);
  }
 
  public String getNavn(){
    return navn;
  }
  
  public String getLag(){
    return lag;
  }
  
  // finner antall plasser til høyre for brikken på samme rad
  private int PlasserMotHoeyre(int gammelPlassering){ 
    return 8-(gammelPlassering%8);
  }
  
  // finner antall plasser til venstre for brikken på samme rad
  private int PlasserMotVenstre(int gammelPlassering){
    return (gammelPlassering%8)-1;
  }
  
  private Boolean GyldigTrekkTaarn(int gammelPlassering, int nyPlassering){
    int plasserMotHoeyre = PlasserMotHoeyre(gammelPlassering);
    int plasserMotVenstre = PlasserMotVenstre(gammelPlassering);
    
    if(plasserMotHoeyre + gammelPlassering <= nyPlassering || gammelPlassering-plasserMotVenstre <= nyPlassering){
      return true;
    }
    
    for(int i = 0;i<trekk.length;i++){
        if(gammelPlassering+trekk[i] == nyPlassering || gammelPlassering-trekk[i] == nyPlassering){ //Sjekker vertikal movement.
          return true;
        }
      }
    return false;
  }
  
  private Boolean GyldigTrekkLoeper(int gammelPlassering, int nyPlassering){
    for(int i =0;i<PlasserMotVenstre(gammelPlassering);i++){
      if(gammelPlassering+trekk_Venstre[i] == nyPlassering){
        return true;
      }
    }
    for(int i = 0;i<PlasserMotHoeyre(gammelPlassering);i++){
      if(gammelPlassering+trekk_Hoeyre[i] ==  nyPlassering){
        return true;
      }
    }
    return false;
  }
  
  public Boolean GyldigTrekk(int gammelPlassering, int nyPlassering){
    int a = gammelPlassering;
    int b = nyPlassering;
    if(GyldigTrekkLoeper(a,b) || GyldigTrekkTaarn(a,b)){
      return true;
    }
    return false;
  }
  
  @Override
  public String toString(){
    return getNavn() + " " + getLag();
  }
}
